# !/usr/bin/env python
# -*- coding:utf-8 -*-
# @FileName : rotaing_array.py
# @Time     : 2024/2/19 23:54
# @Author   : Robot-Zsj
"""
description: 
"""
"""
思路1，逐步后移

思路2，将尾部k个元素移动到头部，同时剩余元素向后移动

1. 原始数组倒序
2. 前k个元素逆序
3. 第k+1个元素到最后一个元素逆序
"""


def func1(nums, k):
    for _ in range(k):
        tmp = nums[-1]
        for i in range(len(nums) - 2, -1, -1):
            nums[i + 1] = nums[i]
        nums[0] = tmp
    return nums


print(func1([1, 2, 3, 4, 5, 6, 7, 8], 2))


def func2(nums, k):
    def reverse(nums, start, end):
        while start < end:
            nums[start], nums[end] = nums[end], nums[start]
            start += 1
            end -= 1

    k %= len(nums)  # 如果k值大于数组长度n，那么经历了n次选择、2n次旋转。。。kn次旋转之后，数组会回到原始状态，那么这些操作就浪费了时间和空间。
    reverse(nums, 0, len(nums) - 1)
    reverse(nums, 0, k - 1)
    reverse(nums, k, len(nums) - 1)
    return nums


print(func2([1, 2, 3, 4, 5, 6, 7, 8], 2))
